查看原文
其他

重放攻击原理和防范措施——如何安全分离比特币(BTC)和比特现金(BCC)

黄世亮 闪电HSL 2019-05-08

0 引言

即将面临的比特币分裂,如何保证你的币在分裂后肯定留下两种币?一个重点要防范的风险就是重放攻击。

 

1 重放攻击原理

首先讲明白,重放攻击其实根本就不是攻击。目前币圈流传的各种关于重放攻击的言论有点过于危言耸听了

重放攻击,这里的“攻击”根本就不是别人对你发起的某种侵略或偷盗行为。而是因为比特币区块链分裂后的两个分支链,都有相同的地址、私钥和交易格式。你在分裂点前的币,自动会被分裂后的两条链都承认。

如果你使用分裂点前的币发起一笔交易,在两条链上这笔交易都会有效。这就是显得你发了两笔交易,这里的另外一笔,就是“重放”。

我打个比方来解释这个,在国军退守台湾后,蒋公将大陆的很多机构都照样在台湾复制了一遍。比如在台湾也建了清华大学。而在大陆的北京,也是有一个清华大学。

如果你在美国给清华大学写一封信,就是用纸,让邮递员送的那种信。但收件地址上只写了“中国清华大学XXX收”

这个收件地址即可以解读为是北京的清华大学,也可以解读为台湾的清华大学。这下邮递员麻烦了,他干脆将你的信复印一遍,送到两个大学去。

这就是重放攻击。因为本来你只想寄给台湾的清华大学,但现在却被重放到了北京的清华大学。

所谓的防范重放攻击,就是想办法让你发的交易,只在一条链上有效,在另一条链上无效。从而可以避免“重放”。

 

2 防范重放攻击

第一种方法就是相信比特币开发者完成开发的交易格式是完善了防重放攻击的代码。

就是说,如果比特币分裂成两条链,任何从分裂点前发出来的交易,都只能在一条链上有效,在另一条链上是无效的。

这个有效还是无效的具体原理是因为其中分裂后的至少一条链的交易格式做了修改。具体怎么改我们就不用管了。反正一笔交易只能在一条链上有效。

这种情况下,用户只需要在分裂前,掌握私钥,把币存在onchain钱包里。分裂后,分别下载两条链的新钱包,然后分别将相同的私钥导入到两个钱包,你就有两种币了。

目前的这次分裂,BTC链上是不需要更换钱包,但BCC链你是需要重新下载一个钱包。

BCC链的钱包在这里下载:

https://www.bitcoincash.org/


 

注意:虽然Bitcoin abc的开发者自称已经做好了防重放攻击的代码,但也被社区很多人指出这个代码是无效的。目前没有100%的证据显示谁是对的,所以最好自己再做一次防重防的措施。

第二种办法就是让分裂后的两条链上的币污染分裂前的币。

如果开发者没做好防重防攻击的代码。那用户可以自己干。因为分裂后的两条链,注定是相互不兼容的,否则就不叫分裂嘛。

所以你可以分别从分裂后的两条链上分别买一点币,发到你分裂前的地址上,以污染你的币。这样你将分裂前的币发送交易时,因为输入带有了污染源,这样就只能在其中一条链上有效了。

具体的操作也非常简单。

分裂前你要将币存在自己掌握私钥的钱包里。

分裂后,你去交易所分别将买一点BTCBCC,然后发到你的地址上。

然后你再去下载一个BCC钱包,将私钥导进这个钱包。

BCC钱包来说,它只能接受到来自分裂后的BCC链上发来的那一点币,而对于BTC钱包来说,它只能接受到来自分裂后的BTC链上的那一点币。

这样你的两个钱包里的币,分别包含了一点来自“未来(分裂后)”的币,从而导致各自在对方链上是无效的。这样你的币就安全了。

 

3 更加具体的操作流程

为了防范重防攻击,这里提供一个详细的操作流程。

1.在分裂前,请将自己的币存在自己控制私钥的地址上。比如使用比太钱包存。使用导出私钥明文功能,将私钥抄下来。或者干脆使用bitcoin钱包存(无论是core,unlimited,classic都可以),不需要同步区块也可以。

2.为了保险起见,建议一定要存一个只有0.01BTC的地址,这个地址里的币就是用来测试用的。

3. https://www.bitcoincash.org/ 下载 一个比特现金(BCC)钱包,是否同步区块并不重要。将上述私钥导入这个钱包。(这个步骤可以在分裂后做,也可以分裂前做。)

4.分裂后,到交易所买0.011BTC,和0.012BBC,都往你的地址上发,发就对了。注意一定要带不一样的小数尾数。

5.然后你将你的钱包同步区块,你就会发现,在BTC钱包只能收到0.011BTC,而BCC钱包只能收到0.012BBC。这两笔交易是不能被重放的,因为它们是来自分裂后的区块。这样你的币就被污染了,以后就不可能被重放了。

6.为了更加安全起见,你分裂将你污染的币,全部发到另一个你自己控制私钥的地址上。这样操作,哪怕是这笔交易被重放了,因为目标地址的私钥是你自己控制的,所以哪怕是被重放也是重放到你自己的地址上。

7.记得先使用你分裂前做好的0.01BTC的那个钱包来完成测试。然后再将你的大额钱包做分离。

 

4 结束语

最后,放轻松。重放不是攻击,没多大事,只要小心一点,就OK

但如果你什么都不做,你可能会失去一种币。



(如果您觉得好,欢迎关注我的公众号: 闪电HSL,也欢迎加我微信号:13116885)


(如果你想学习比特币和区块链知识,欢迎加入我的小密圈)




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存